package javase.javase01.exercise07;

import java.io.*;

/**
 * @author: Gan
 * @date 2021/4/19 0019 15:33
 * @description: 设计一个方法
 * public static void encodeFile(File encodingFile,
 * File encodedFile);
 * 在这个方法中把encodingFile的内容进行加密，然后保存到encodedFile文件中。
 * 加密算法：
 * 数字：
 * 如果不是9的数字，在原来的基础上加1，比如5变成6, 3变成4
 * 如果是9的数字，变成0
 * 字母字符：
 * 如果是非z字符，向右移动一个，比如d变成e, G变成H
 * 如果是z，z->a, Z-A。
 * 字符需要保留大小写
 * 非字母字符
 * 比如',&^ 保留不变，中文也保留不变
 **/
public class Day18Work2 {
    public static void main(String[] args) throws IOException {
        File encodingFile = new File("a.txt");
        File encodedFile = new File("b.txt");
        encodeFile(encodingFile, encodedFile);

    }

    private static void encodeFile(File encodingFile, File encodedFile) throws IOException {
        BufferedReader br = new BufferedReader(new FileReader(encodingFile));
        BufferedWriter bw = new BufferedWriter(new FileWriter(encodedFile));
        String s;
        while ((s = br.readLine()) != null) {
            char[] chars = s.toCharArray();
            for (int i = 0; i < chars.length; i++) {
                if (chars[i] >= '0' && chars[i] < '9') {
                    chars[i] = (char) (chars[i] + 1);
                    bw.write(chars[i]);
                } else if (chars[i] == '9') {
                    chars[i] = '0';
                    bw.write(chars[i]);
                } else if (chars[i] >= 'a' && chars[i] < 'z') {
                    chars[i] = (char) (chars[i] + 1);
                    bw.write(chars[i]);
                } else if (chars[i] == 'z') {
                    chars[i] = 'a';
                    bw.write(chars[i]);
                } else if (chars[i] >= 'A' && chars[i] < 'Z') {
                    chars[i] = (char) (chars[i] + 1);
                    bw.write(chars[i]);
                } else if (chars[i] == 'Z') {
                    chars[i] = 'A';
                    bw.write(chars[i]);
                } else {
                    //非英文与数字直接写入b文件中
                    bw.write(chars[i]);
                }
            }
        }
        br.close();
        bw.close();
    }
}
